import { createRouter, createWebHistory } from 'vue-router'
import { userInfoStore } from '@/store/userInfoStore'

// 判断是否刷新
let flag = true

const routes = [
  {
    path: '/',
    name: 'home',
    redirect: '/login'
  },
  {
    path: '/login',
    name: 'login',
    component: () => import(/* webpackChunkName: "login" */ '@/page/login/index.vue')
  },
  {
    path: '/welcome',
    name: 'welcome',
    component: () => import('@/views/layout/index.vue')
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

// 是在每次路由跳转时添加 还是在获取用户权限时添加
router.beforeEach(async (to, from, next) => {
  const userInfo = userInfoStore()
  const tokens = localStorage.getItem('token')

  // 有token放行 -> 有刷新页面吗 ? 重新执行获取用户菜单权限 : 放行
  // 没有token -> 跳转之前在登录页吗 ? 放行 : 跳转登录页
  if (tokens) {
    // flag是默认true 也代表初始需要进行获取用户菜单权限
    if (flag === true) {
      try {
        // 请求用户菜单权限
        await userInfo.getUserMenu({ tokens })
        // 然后将标志位改为false用于判断页面是否刷新 只要是false就代表页面没有刷新也就无需重新获取用户菜单权限
        flag = false
        // 放行
        next({ path: to.fullPath })
      } catch (error) {
        // 如果初始化失败就跳转到登录页
        next({ path: '/login', replace: true })
      }
    } else {
      // 放行
      next()
    }
  } else {
    if (to.name === 'login') {
      next()
    } else {
      next({ name: 'login' })
    }
  }
})

export default router
